package repositorios;


import interfaces.IRepositorioLinha;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import modelos.Empresa;
import modelos.Linha;
import util.GerenteConexao;


public class RepositorioLinha implements IRepositorioLinha{


	public void adicionarLinha( Linha l){
		String sql = "insert into linha(id, id_empresa, codigo, descricao) values (?,?,?,?)";

		try {
			PreparedStatement ps = GerenteConexao.getConexao().prepareStatement(sql);
			montarOperacao(ps, l);

			ps.executeUpdate();
		} 
		catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void removerLinha(Linha l){

		String sql = "delete from linha where id = ?";
		try{
			PreparedStatement ps = GerenteConexao.getConexao().prepareStatement(sql);
			ps.setDouble(1, l.getId());

			ps.executeUpdate();
		} catch(Exception e){
			e.printStackTrace();
		}
	}

	public List<Linha> listarLinha(){
		String sql = "Select * from linha";
		List<Linha> retorno = null;
		try {
			Statement st = GerenteConexao.getConexao().createStatement();
			ResultSet rs = st.executeQuery(sql);
			retorno = new ArrayList<Linha>();

			while(rs.next()){
				Linha l = montarObjeto(rs);
				retorno.add(l);
			}
		} 
		catch (Exception e) {
			e.printStackTrace();
		}
		return retorno;
	}

	public void editarLinha(Linha l){
		String sql = "update linha set id=?, id_empresa=?, codigo =?, descricao =?  where id = "+ l.getId();

		try {
			PreparedStatement ps = GerenteConexao.getConexao().prepareStatement(sql);
			montarOperacao(ps, l);

			ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public Linha buscarLinhaPorId(Long id){
		String sql = "select * from linha where id = "+ id;
		Linha l = null;

		try{
			Statement st = GerenteConexao.getConexao().createStatement();
			ResultSet rs = st.executeQuery(sql);
			if(rs.next()){
				l = montarObjeto(rs);
			}
		}
		catch(Exception ex){
			ex.printStackTrace();
		}
		return l;
	}
	
	public List<Linha> buscaLike(String campo, String valor){
		
		String sql = "Select * FROM linha WHERE " + campo + " like '%" + valor + "%'";
		List<Linha> retorno = null;
		try {
			Statement st = GerenteConexao.getConexao().createStatement();
			ResultSet rs = st.executeQuery(sql);
			retorno = new ArrayList<Linha>();

			while(rs.next()){
				Linha l = montarObjeto(rs);
				retorno.add(l);
			}
		} 
		catch (Exception e) {
			e.printStackTrace();
		}
		return retorno;
	}
	
	private Linha montarObjeto(ResultSet rs){
		Linha l = new Linha();
		Empresa e = new Empresa();
		try {
			l.setId(rs.getInt("id"));
			e.setId(rs.getLong("id_empresa"));
			l.setEmpresa(e);
			l.setCodigo(rs.getString("codigo"));
			l.setDescricao(rs.getString("descricao"));
		} catch (SQLException ex) {
			ex.printStackTrace();
		}
		return l;
	}
	
	private void montarOperacao(PreparedStatement ps, Linha l){

		try {
			ps.setLong(1, l.getId());
			ps.setLong(2, l.getEmpresa().getId());
			ps.setString(3, l.getCodigo());
			ps.setString(4, l.getDescricao());
		} catch (SQLException ex) {
			ex.printStackTrace();
		}
	}
}

